package main

import (
	"fmt"
	"reflect"
)

//type User struct {
//	Name string
//	Age  int
//}

// 该函数更新User的Name和Age属性
func (u *User) UpdateNameAndAge(name string, age int) {
	u.Name = name
	u.Age = age
}

// 输出用户信息
func (u *User) GetUserInfo() string {
	return fmt.Sprintf("%v", *u)
}

func main9() {
	user := &User{
		Name: "A",
		Age:  18,
	}

	// 利用反射获得user的值对象
	getValue := reflect.ValueOf(user)

	// 利用反射获得GetUserInfo的方法对象
	method := getValue.MethodByName("GetUserInfo")

	// 利用方法对象，实现方法的执行，并传入参数nil，代表该方法没有参数
	returnValue := method.Call(nil)
	// 打印方法执行后的返回值
	fmt.Printf("%v\n", returnValue[0])

	args := []reflect.Value{reflect.ValueOf("B"), reflect.ValueOf(20)}
	method.Call(args)
	fmt.Println(user)

}
